// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com

// ReSharper disable CheckNamespace
// ReSharper disable CommentTypo
// ReSharper disable IdentifierTypo
// ReSharper disable InconsistentNaming
// ReSharper disable StringLiteralTypo
// ReSharper disable UnusedMember.Global
// ReSharper disable UseNameofExpression

/*
 * Ars Magna project, http://arsmagna.ru
 */

#nullable enable

namespace HtmlAgilityPack;

/// <summary>
/// Represents a parsing error found during document parsing.
/// </summary>
public class HtmlParseError
{
    #region Fields

    private HtmlParseErrorCode _code;
    private int _line;
    private int _linePosition;
    private string _reason;
    private string _sourceText;
    private int _streamPosition;

    #endregion

    #region Constructors

    internal HtmlParseError (
        HtmlParseErrorCode code,
        int line,
        int linePosition,
        int streamPosition,
        string sourceText,
        string reason)
    {
        _code = code;
        _line = line;
        _linePosition = linePosition;
        _streamPosition = streamPosition;
        _sourceText = sourceText;
        _reason = reason;
    }

    #endregion

    #region Properties

    /// <summary>
    /// Gets the type of error.
    /// </summary>
    public HtmlParseErrorCode Code
    {
        get { return _code; }
    }

    /// <summary>
    /// Gets the line number of this error in the document.
    /// </summary>
    public int Line
    {
        get { return _line; }
    }

    /// <summary>
    /// Gets the column number of this error in the document.
    /// </summary>
    public int LinePosition
    {
        get { return _linePosition; }
    }

    /// <summary>
    /// Gets a description for the error.
    /// </summary>
    public string Reason
    {
        get { return _reason; }
    }

    /// <summary>
    /// Gets the the full text of the line containing the error.
    /// </summary>
    public string SourceText
    {
        get { return _sourceText; }
    }

    /// <summary>
    /// Gets the absolute stream position of this error in the document, relative to the start of the document.
    /// </summary>
    public int StreamPosition
    {
        get { return _streamPosition; }
    }

    #endregion
}
